Index Optimization Techniques

Database Tutorials - মঙ্গোডিবি (MongoDB) MongoDB Performance Tuning |
135
135

MongoDB তে ইনডেক্সিং একটি গুরুত্বপূর্ণ পারফরম্যান্স অপটিমাইজেশন কৌশল, যা কুয়েরি এক্সিকিউশন দ্রুততর করতে সাহায্য করে। তবে, সঠিকভাবে ইনডেক্স ব্যবহার না করলে পারফরম্যান্স হ্রাস পেতে পারে, তাই ইনডেক্স ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ন। এখানে MongoDB তে ইনডেক্স অপটিমাইজেশন সম্পর্কিত কিছু গুরুত্বপূর্ণ কৌশল আলোচনা করা হয়েছে।


1. সঠিক ইনডেক্স টাইপ নির্বাচন করা

MongoDB বিভিন্ন ধরনের ইনডেক্স সমর্থন করে, এবং সঠিক ইনডেক্স টাইপ নির্বাচন করা খুবই গুরুত্বপূর্ণ। MongoDB তে প্রধানত যে ইনডেক্সগুলো ব্যবহৃত হয় তা হল:

সিঙ্গল-ফিল্ড ইনডেক্স

একটি সিঙ্গল-ফিল্ড ইনডেক্স একটি একক ফিল্ডের উপর তৈরি করা হয় এবং এটি সেই ফিল্ডে ডেটা অনুসন্ধান দ্রুততর করতে সাহায্য করে।

উদাহরণ:

db.users.createIndex({ age: 1 })

এটি এমন কুয়েরি অপটিমাইজ করবে:

db.users.find({ age: 30 })

কম্পাউন্ড ইনডেক্স

কম্পাউন্ড ইনডেক্স একাধিক ফিল্ডের উপর তৈরি করা হয় এবং এটি একাধিক ফিল্ডের ভিত্তিতে কুয়েরি অপটিমাইজ করতে সহায়তা করে।

উদাহরণ:

db.users.createIndex({ age: 1, name: 1 })

এটি এমন কুয়েরি অপটিমাইজ করবে:

db.users.find({ age: 30, name: "John" })

হ্যাশড ইনডেক্স

হ্যাশড ইনডেক্স বিশেষভাবে ঐতিহ্যগত কুয়েরি অপারেশনগুলির জন্য ব্যবহৃত হয়, যেমন শার্ডিং এর জন্য ইনডেক্স তৈরি করা।

উদাহরণ:

db.users.createIndex({ userId: "hashed" })

এটি এমন কুয়েরি অপটিমাইজ করবে:

db.users.find({ userId: "12345" })

টেক্সট ইনডেক্স

টেক্সট ইনডেক্স ফিল্ডে পূর্ণ পাঠ অনুসন্ধান করতে ব্যবহৃত হয়। MongoDB এমন কুয়েরির জন্য বিশেষ ইনডেক্স তৈরি করে যা শব্দ বা অংশিক মেলানোর জন্য ব্যবহৃত হয়।

উদাহরণ:

db.articles.createIndex({ content: "text" })

এটি এমন কুয়েরি অপটিমাইজ করবে:

db.articles.find({ $text: { $search: "MongoDB optimization" } })

জিওস্প্যাটিয়াল ইনডেক্স

জিওস্প্যাটিয়াল ইনডেক্স ব্যবহার করা হয় স্থানের (জিওগ্রাফিক) ডেটার জন্য, যেমন দূরত্ব হিসাব বা স্থানের ডেটা ফিল্টার করা।

উদাহরণ:

db.places.createIndex({ location: "2dsphere" })

এটি এমন কুয়েরি অপটিমাইজ করবে:

db.places.find({
  location: { $nearSphere: { $geometry: { type: "Point", coordinates: [10, 20] }, $maxDistance: 1000 } }
})

2. ইনডেক্স সিলেকটিভিটি বিবেচনা করা

সিলেকটিভিটি হল কতটা একটি ইনডেক্স ডেটা ফিল্টার করতে সক্ষম। উচ্চ সিলেকটিভিটি ইনডেক্স (যে ফিল্ডে অনেক ভিন্ন ভিন্ন মান থাকে) কার্যকরী হয়, কারণ এটি ডেটার মধ্যে অনেক ফিল্টারিং করে থাকে।

  • উচ্চ সিলেকটিভিটি: ইনডেক্সগুলো যা অনেক ভিন্ন মান ধারণ করে (যেমন: userId, email), তা দ্রুত কার্যকরী হয়।
  • নিম্ন সিলেকটিভিটি: ইনডেক্সগুলো যা কম ভিন্ন মান ধারণ করে (যেমন: বুলিয়ান ফিল্ড বা প্রায় একই মান থাকা ফিল্ড) খুব কার্যকরী নাও হতে পারে।

যদি সিলেকটিভিটি কম হয়, MongoDB ইনডেক্সটি উপেক্ষা করে পুরো ডেটাবেস স্ক্যান করতে পারে।


3. অতি ইনডেক্সিং এড়ানো

যদিও ইনডেক্স পারফরম্যান্স বাড়ায়, তবে অতি ইনডেক্সিং করলে কিছু সমস্যাও তৈরি হতে পারে:

  • লিখার পারফরম্যান্স: প্রতি ডকুমেন্ট ইনসার্ট, আপডেট বা ডিলিট করার সময়, ইনডেক্সগুলো আপডেট হতে থাকে। ফলে, অতিরিক্ত ইনডেক্স লেখার পারফরম্যান্সে প্রভাব ফেলতে পারে।
  • ডিস্ক স্পেস: ইনডেক্সগুলোর জন্য অতিরিক্ত ডিস্ক স্পেস প্রয়োজন। একাধিক ইনডেক্স থাকলে ডিস্ক স্পেসের অপচয় হতে পারে।

এজন্য, শুধুমাত্র গুরুত্বপূর্ণ ইনডেক্সগুলো তৈরি করা উচিত এবং অপর্যাপ্ত বা অপ্রয়োজনীয় ইনডেক্সগুলো মুছে ফেলা উচিত। ইনডেক্সগুলোর ব্যবহারের পরিসংখ্যান দেখতে explain() এবং indexStats() ব্যবহার করা যেতে পারে।


4. অ্যাগ্রিগেশন পাইপলাইনে ইনডেক্স ব্যবহার করা

MongoDB তে ইনডেক্স অ্যাগ্রিগেশন পাইপলাইনে $match এবং $sort স্টেজে ব্যবহার করা যেতে পারে।

  • $match স্টেজ: যদি এটি পাইপলাইনের প্রথম স্টেজ হয়, MongoDB ইনডেক্স ব্যবহার করে দ্রুত ফিল্টার করতে পারে।
  • $sort স্টেজ: যদি $sort স্টেজ থাকে, MongoDB ইনডেক্স ব্যবহার করে দ্রুত সোর্ট করতে পারে।

এমন একটি উদাহরণ:

db.orders.aggregate([
  { $match: { status: "completed" } },
  { $sort: { orderDate: -1 } }
])

5. কভার্ড কুয়েরি ব্যবহার করা

কভার্ড কুয়েরি হল এমন কুয়েরি যেখানে সমস্ত প্রয়োজনীয় ফিল্ড ইনডেক্সে অন্তর্ভুক্ত থাকে, তাই MongoDB ইনডেক্স থেকেই ফলাফল ফেরত দিতে পারে, এবং ডকুমেন্ট স্ক্যান করতে হয় না। এটি পারফরম্যান্স খুবই বৃদ্ধি করে।

এটি এমন একটি কভার্ড কুয়েরির উদাহরণ:

db.users.createIndex({ age: 1, name: 1 })
db.users.find({ age: 30 }, { name: 1 })

এখানে MongoDB ইনডেক্স ব্যবহার করে name ফিল্ডের মান সরাসরি এনে দেয়, ডকুমেন্টের ভিতরে প্রবেশ না করেই।


6. ইনডেক্স ব্যবহারের মনিটরিং ও বিশ্লেষণ

MongoDB ইনডেক্স ব্যবহারের জন্য কিছু মনিটরিং টুল রয়েছে, যা আপনাকে ইনডেক্সের কার্যকারিতা বিশ্লেষণ করতে সাহায্য করে। MongoDB তে explain() এবং indexStats() কমান্ড ব্যবহার করে আপনি ইনডেক্স ব্যবহারের পরিসংখ্যান দেখতে পারেন।

  • explain(): এটি আপনাকে দেখাবে কীভাবে MongoDB একটি নির্দিষ্ট কুয়েরি কার্যকর করছে, এবং কোন ইনডেক্স ব্যবহার হচ্ছে।

    db.users.find({ age: 30 }).explain("executionStats")
    
  • indexStats(): ইনডেক্স ব্যবহারের তথ্য জানতে এই কমান্ডটি ব্যবহার করতে পারেন।

    db.collection.indexStats()
    

7. অপ্রয়োজনীয় ইনডেক্স ড্রপ করা

অপ্রয়োজনীয় ইনডেক্সগুলি মুছে ফেলা উচিত, কারণ এগুলি ডিস্ক স্পেস খরচ করে এবং লেখার পারফরম্যান্স কমিয়ে দিতে পারে। ইনডেক্স ড্রপ করার জন্য:

db.collection.dropIndex("indexName")

এটি ইনডেক্সের কার্যকারিতা বিশ্লেষণ করার পর, অনুপযুক্ত ইনডেক্সগুলি মুছে ফেলতে সাহায্য করবে।


সারাংশ

MongoDB তে ইনডেক্স অপটিমাইজেশন কার্যকরী কুয়েরি পারফরম্যান্সের জন্য অপরিহার্য। সঠিক ইনডেক্স টাইপ নির্বাচন, ইনডেক্সের সিলেকটিভিটি বিবেচনা করা, অতি ইনডেক্সিং এড়ানো, এবং কভার্ড কুয়েরি ব্যবহার করার মাধ্যমে MongoDB তে কার্যকরী ডেটাবেস অপটিমাইজেশন করা সম্ভব। MongoDB তে ইনডেক্স ব্যবস্থাপনা ও মনিটরিং আপনাকে সর্বোত্তম পারফরম্যান্স নিশ্চিত করতে সাহায্য করবে।

Content added By
Promotion